import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:mybase/base/tool/color/FFColor.dart';
import 'package:mybase/base/tool/empty/FFEmpty.dart';
import 'package:sprintf/sprintf.dart';

extension FFStringExt on String {
  String format(List<String?> list) {
    return sprintf(this, list);
  }

  int toINT({
    int defaultValue = 0,
  }) {
    if (this == null) {
      return defaultValue;
    }

    if (FFEmpty.stringIsEmpty(this)) {
      return defaultValue;
    }

    try {
      return int.parse(this ?? "$defaultValue");
    } catch (e) {
      return defaultValue;
    }
  }

  num toNum({
    int defaultValue = 0,
  }) {
    if (this == null) {
      return defaultValue;
    }

    if (FFEmpty.stringIsEmpty(this)) {
      return defaultValue;
    }

    try {
      return num.parse(this ?? "$defaultValue");
    } catch (e) {
      return defaultValue;
    }
  }

  Color toColor({int opacity = 100}) {
    return hex(this, opacity: opacity);
  }

  // 如果是空的， 返回空串
  String get toEmpty {
    return this;
  }

  // 如果是空的， 返回默认值
  String toEmpty2({String defaultValue = "-"}) {
    if (FFEmpty.stringIsEmpty(this)) return defaultValue;
    return this;
  }
}

extension FFStringExt2 on String? {
  String format(List<String?> list) {
    if (this == null) return "";
    return this!.format(list);
  }

  int toINT({
    int defaultValue = 0,
  }) {
    if (this == null) {
      return defaultValue;
    }

    if (FFEmpty.stringIsEmpty(this)) {
      return defaultValue;
    }

    try {
      return int.parse(this ?? "$defaultValue");
    } catch (e) {
      return defaultValue;
    }
  }

  num toNum({
    int defaultValue = 0,
  }) {
    if (this == null) {
      return defaultValue;
    }

    if (FFEmpty.stringIsEmpty(this)) {
      return defaultValue;
    }

    try {
      return num.parse(this ?? "$defaultValue");
    } catch (e) {
      return defaultValue;
    }
  }

  Color toColor({int opacity = 100}) {
    return hex(this ?? "#FFFFFF", opacity: opacity);
  }

  // 如果是空的， 返回空串
  String get toEmpty {
    if (this == null) return "";
    return this ?? "";
  }

  // 如果是空的， 返回默认值
  String toEmpty2({String defaultValue = "-"}) {
    if (this == null) return defaultValue;
    if (FFEmpty.stringIsEmpty(this)) return defaultValue;
    return this ?? defaultValue;
  }
}

extension FFStringDynaic on dynamic {
  String format(List<String?> list) {
    if (this == null) return "";
    if (FFEmpty.stringIsEmpty(this)) return "";

    if (this is String) {
      String str = this;
      return str.format(list);
    }
    return "";
  }
}
